
from goods.models import GoodsChannel

# 获取渲染主页的商品频道分类模版参数
def get_categories():
    # 初始化一个空字典，用户保存模版参数
    categories = {}

    # (1)、读取所有频道信息 —— 根据分组id升序，根据sequence升序
    # 第1组为：手机1，相机2和数码3
    # 第2组为：电脑1，办公2和家用电器3
    channels = GoodsChannel.objects.order_by(
        'group_id',
        'sequence'
    )

    # (2)、遍历出每一个频道
    for channel in channels:

        # 每当读取一个分组的第一个频道的时候，创建以分组id为key的键值对
        if channel.group_id not in categories:
            categories[channel.group_id] = {
                'channels': [], # 频道
                'sub_cats': []  # 二级分类
            }

        # (3)、插入当前频道信息
        categories[channel.group_id]['channels'].append({
            'id': channel.id,
            'name': channel.category.name, # 当前频道关联的一级分类名称
            'url': channel.url
        })

        cat1 = channel.category # 当前频道的分类对象(一级分类对象)
        cat2s = cat1.subs.all() # 所有关联的二级对象查询集
        # (4)、插入二级分类信息
        for cat2 in cat2s:

            # (5)、插入三级分类信息
            cat3s = cat2.subs.all() # 所有关联的三级份额里对象查询集
            cat3_list = []
            for cat3 in cat3s:
                cat3_list.append({
                    'id': cat3.id,
                    'name': cat3.name
                })

            categories[channel.group_id]['sub_cats'].append({
                'id': cat2.id,
                'name': cat2.name,
                'sub_cats': cat3_list # 三级分类
            })

    return categories